package com.yanqu.road.server.manager.douluodalu.impl;

import com.yanqu.road.entity.activity.douluodalu.DouLuoDaLuUserEvent;
import com.yanqu.road.entity.activity.douluodalu.config.DouLuoDaLuEventInfo;
import com.yanqu.road.entity.activity.douluodalu.enums.eDouLuoDaLuBuffType;
import com.yanqu.road.logic.activity.DouLuoDaLuLogic;
import com.yanqu.road.logic.helper.RandomWeightConfigHelper;
import com.yanqu.road.server.manager.douluodalu.CrossDouLuoDaLuContext;
import com.yanqu.road.server.manager.douluodalu.CrossDouLuoDaLuMgr;
import com.yanqu.road.server.manager.douluodalu.DouLuoDaLuEventResult;
import com.yanqu.road.server.manager.douluodalu.DouLuoEventHandleResult;
import com.yanqu.road.utils.property.Property;
import com.yanqu.road.utils.property.PropertyHelper;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;

/**
 * 七怪赠礼
 */
public class DouLuoDaLuShrekGiftsEventAction extends DouLuoDaLuBaseEventAction {

    public DouLuoDaLuShrekGiftsEventAction(CrossDouLuoDaLuContext context, DouLuoDaLuEventInfo eventInfo) {
        super(context, eventInfo);
    }

    @Override
    DouLuoDaLuEventResult init0() {
        DouLuoDaLuEventResult eventResult = new DouLuoDaLuEventResult();
        DouLuoDaLuUserEvent event = newDouLuoDaLuUserEvent();
        context.getUserData().setEvent(event);

        eventResult.setEventId(eventInfo.getEventId());
        eventResult.setUserEvent(event);
        return eventResult;
    }

    @Override
    DouLuoEventHandleResult handle0(int action, byte[] params) {
        DouLuoEventHandleResult handleResult = new DouLuoEventHandleResult();

        //返回后区服直接开宝箱
        handleResult.setEventId(eventInfo.getEventId());
        handleResult.setUserEvent(context.getUserData().getEvent());

        handleScore(handleResult);

        //buff
        List<Integer> buffIdList = new ArrayList<>();
        synchronized (context.getUserData()) {
            buffIdList.add(eDouLuoDaLuBuffType.GOODS_BUFF.getId());
            buffIdList = CrossDouLuoDaLuMgr.mergeXianCaoAndUse(context.getUserData(), buffIdList);
        }
        //有道具奖励
        Property goodsProperty = RandomWeightConfigHelper.getProperty(eventInfo.getRewards(), new Random());
        //道具加倍
        if(buffIdList.contains(eDouLuoDaLuBuffType.GOODS_BUFF.getId())){
            for (Map.Entry<Integer, BigInteger> entry : goodsProperty.getGoods().entrySet()) {
                entry.setValue(BigInteger.valueOf(DouLuoDaLuLogic.calBuff(entry.getValue().longValue(), eDouLuoDaLuBuffType.GOODS_BUFF, context.getActivity().getConfig())));
            }
        }
        handleResult.getBuffIdList().addAll(buffIdList);
        handleResult.setRewards(PropertyHelper.parsePropertyToString(goodsProperty));

        context.getUserData().setEvent(new DouLuoDaLuUserEvent());
        return handleResult;
    }
}
